十分钟入门pandas(下)【解读pandas官方文档】
(点击上方Python爱好者社区,可快速关注)
作者:王大伟
博客专栏:https://www.hellobi.com/u/wangdawei/articles
Python爱好者社区 唯一小编
前言
前文传送门:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
数据透视表
查看更多内容:http://pandas.pydata.org/pandas-docs/version/0.20/reshaping.html#reshaping-pivot
import datetime
注:导入时间模块
df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 6,
'B': ['A', 'B', 'C'] * 8,
'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4,
'D': np.random.randn(24),
'E': np.random.randn(24),
'F': [datetime.datetime(2013, i, 1) for i in range(1, 13)] +
[datetime.datetime(2013, i, 15) for i in range(1, 13)]})
df
注:创建了一个dataframe
我们可以很容易地从这些数据生成数据透视表:
pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])
注:数据透视表玩法很多,大家通过帮助文档好好研究下
时间序列
pandas具有简单,强大和高效的功能,用于在频率转换期间执行重采样操作(例如,将数据转换为5分钟数据)。 这在金融应用中非常常见,但不限于此。 请参阅时间序列部分:http://pandas.pydata.org/pandas-docs/version/0.20/timeseries.html#timeseries
rng = pd.date_range('1/1/2012', periods=100, freq='S')
rng
。。。。。。
首先创建了一个100秒时间戳的系列,s为second的意思。
频率:字符串或pandas偏移对象,可选 一个pandas日期偏移字符串或相应的对象
ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)
ts
将刚产生的时间序列rng作为索引index,随机产生0-500之间的整数作为值。
。。。。。。
将该系列缩小为5分钟,就是五分钟采样一次,并对其值进行求和:
ts.resample('5Min').sum()
时区表示
rng = pd.date_range('3/6/2012 00:00', periods=5, freq='D')
rng
注:产生5个数的时间序列,偏移量为D:Day,日期
ts = pd.Series(np.random.randn(len(rng)), rng)
ts
注:将产生的日期作为索引,产生日起数量(5个)的标准正态分布的数值
本地化时区表示:
ts_utc = ts.tz_localize('UTC')
ts_utc
转换成其他时区:
ts_utc.tz_convert('US/Eastern')
在时间跨度表示之间转换:
rng = pd.date_range('1/1/2012', periods=5, freq='M')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
ts
ps = ts.to_period()
ps
注:将时间日期索引转化为时间阶段索引(这里是用月份表示)
ps.to_timestamp()
注:用月份的初始日期表示
分类
自版本0.15以来,pandas可以在DataFrame中包含分类数据。 有关完整文档,请参阅分类介绍:http://pandas.pydata.org/pandas-docs/version/0.20/categorical.html#categorical
和API文档:http://pandas.pydata.org/pandas-docs/version/0.20/api.html#api-categorical
df = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":['a', 'b', 'b', 'a', 'a', 'e']})
df
将原始成绩转换为分类数据类型:
df["grade"] = df["raw_grade"].astype("category")
df["grade"]
注:显示成绩可以分为三类
将类别重命名为更有意义的名称
df["grade"].cat.categories = ["very good", "good", "very bad"]
df["grade"]
注:显示的就是分类信息了
df["grade"] = df["grade"].cat.set_categories(["very bad", "bad", "medium", "good", "very good"])
df["grade"]
注:显示的就是分类信息了
排序是按类别中的顺序排列的,而不是词法顺序
df.sort_values(by="grade")
注:根据成绩排序
按分类列分组还显示空类:
df.groupby("grade").size()
注:统计分类后每类元素个数
绘图
绘图更多用法:http://pandas.pydata.org/pandas-docs/version/0.20/visualization.html#visualization
import matplotlib.pyplot as plt
注:导入绘图模块
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
tts.cumsum()s.plot()
plt.show()
注:绘制时间序列图形,ts.cumsum()为累积值,绘图必须使用show()方法才能展现出来图。
在DataFrame中,plot()可以方便地绘制带有标签的所有列:
df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index,
columns=['A', 'B', 'C', 'D'])
df = df.cumsum()
plt.figure()
df.plot()
plt.legend(loc='best')
plt.show()
获取数据输入/输出
CSV
写入csv文件:http://pandas.pydata.org/pandas-docs/version/0.20/io.html#io-store-in-csv
df.to_csv('foo.csv')
读取csv文件:http://pandas.pydata.org/pandas-docs/version/0.20/io.html#io-read-csv-table
pd.read_csv('foo.csv')
。。。。。。
Excel
读取和写入Excel文件:http://pandas.pydata.org/pandas-docs/version/0.20/io.html#io-excel
写入Excel:
df.to_excel('foo.xlsx', sheet_name='Sheet1')
读取Excel:
pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA'])
。。。。。。
易错点
如果你操作时遇到类似这种问题:
你可以看看这里的解释寻求帮助:http://pandas.pydata.org/pandas-docs/version/0.20/basics.html#basics-compare
也可以参考这里:http://pandas.pydata.org/pandas-docs/version/0.20/gotchas.html#gotchas
花了一天半时间把10分钟入门pandas官方文档解读了一下,大家有兴趣可以深入了解官方文档的内容,或者用到某部分再去查文档也是很ok的,哈哈。
感谢你的阅读~
新福利:Kenny 7月11日在Hellobi Live直播 《自然语言处理之-基于深度学习技术的诗歌写作机器人》内容:
1、 写诗机器人效果展示
2、 基于深度学习写诗机器人训练数据收集,清洗,导入
3、 诗歌数据预处理,特征化和数值化后转化为可训练的数据
4、 写诗机器人模块介绍
5、 写诗机器人算法介绍
6、 写诗机器人的实现及效果评估
付费参加方式:点击阅读原文报名
免费参加方式:长按下图,关注公众号Python爱好者社区,在菜单栏点击免费听课参加活动
关注公众号,“Python爱好者社区”,回复“爬虫”即可获取崔老师爬虫免费学习视频。
为大家提供与Python相关的最新技术和资讯。
长按指纹 > 识别图中二维码 > 添加关注